// cloudfunctions/router/index.js
'use strict';
const fs = require('fs');
const path = require('path');

exports.main = async (event, context) => {
  const { path: reqPath } = event; // 获取请求路径
  
  // 静态资源扩展名列表（根据项目实际用到的资源类型补充）
  const staticExts = [
    '.js', '.css', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico',
    '.woff', '.woff2', '.ttf', '.eot', '.json', '.html', '.map'
  ];
  const ext = path.extname(reqPath).toLowerCase(); // 获取请求路径的扩展名
  
  // 1. 如果是静态资源，直接返回对应文件
  if (staticExts.includes(ext)) {
    try {
      // 拼接静态资源的本地路径（uniCloud 部署时，H5 资源会放在 UNI_PUBLIC_PATH 目录）
      const filePath = path.join(process.env.UNI_PUBLIC_PATH || '', reqPath);
      const content = fs.readFileSync(filePath); // 读取文件内容
      return {
        statusCode: 200,
        headers: { 'Content-Type': getContentType(ext) }, // 设置正确的 MIME 类型
        body: content.toString('base64'), // 二进制内容转 base64
        isBase64Encoded: true // 标记为 base64 编码
      };
    } catch (e) {
      // 静态资源不存在，返回 404
      return { statusCode: 404, body: 'Static resource not found' };
    }
  }
  
  // 2. 非静态资源（路由路径，如 /pages/about），返回 index.html
  try {
    const indexPath = path.join(process.env.UNI_PUBLIC_PATH || '', 'index.html');
    const content = fs.readFileSync(indexPath); // 读取首页内容
    return {
      statusCode: 200,
      headers: { 'Content-Type': 'text/html; charset=utf-8' },
      body: content.toString('base64'),
      isBase64Encoded: true
    };
  } catch (e) {
    // 首页不存在，返回 500 错误
    return { statusCode: 500, body: 'Index file not found' };
  }
};

// 根据文件扩展名获取 MIME 类型（确保静态资源正确解析）
function getContentType(ext) {
  const mimeMap = {
    '.js': 'application/javascript; charset=utf-8',
    '.css': 'text/css; charset=utf-8',
    '.html': 'text/html; charset=utf-8',
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg',
    '.gif': 'image/gif',
    '.svg': 'image/svg+xml',
    '.ico': 'image/x-icon',
    '.json': 'application/json; charset=utf-8',
    '.map': 'application/json; charset=utf-8', // sourcemap 文件
    '.woff': 'font/woff',
    '.woff2': 'font/woff2',
    '.ttf': 'font/ttf',
    '.eot': 'application/vnd.ms-fontobject'
  };
  return mimeMap[ext] || 'text/plain';
}